const mongodb = require('mongodb');
const mongoClient = mongodb.MongoClient;

// 连接数据库
function connect(callback) {
  mongoClient.connect(
    'mongodb://localhost:27017',
    { useUnifiedTopology: true },
    (err, dbClient) => {
      if (err) {
        // console.log("连接数据库失败")
        callback(err, null);
        return;
      }
      const family = dbClient.db('familyStore'); // 指定数据库
      // 进行增删改查操作
      callback(null, family);
    }
  );
}

// 增
function insert(collectionName, query, callback) {
  connect((err, user) => {
    if (err) {
      callback(err, null);
      return;
    }
    user.collection(collectionName).insert(query, (err, result) => {
      if (err) {
        callback(err, null);
        return;
      }
      callback(null, result);
    });
  });
}

// 查
function find(collectionName, query, callback) {
  connect((err, user) => {
    if (err) {
      callback(err, null);
      return;
    }
    user
      .collection(collectionName)
      .find(query)
      .toArray((err, result) => {
        if (err) {
          callback(err, null);
          return;
        }
        callback(null, result);
      });
  });
}

// 改
function update(updateMethod, collectionName, oldValue, newValue, callback) {
  connect((err, user) => {
    if (err) {
      callback(err, null);
      return;
    }
    user
      .collection(collectionName)
      [updateMethod](oldValue, newValue, (err, result) => {
        if (err) {
          callback(err, null);
          return;
        }
        callback(null, result);
      });
  });
}

// 删
function deleteInfo(deleteMethod, collectionName, query, callback) {
  connect((err, user) => {
    if (err) {
      callback(err, null);
      return;
    }
    user.collection(collectionName)[deleteMethod](query, (err, result) => {
      if (err) {
        callback(err, null);
        return;
      }
      callback(null, result);
    });
  });
}

module.exports = {
  insert,
  find,
  update,
  deleteInfo,
};
